package com.wisecoach.gatewayplus.transaction;

import com.wisecoach.annotation.NotNull;
import com.wisecoach.annotation.Nullable;

/**
 * 事务上下文，详细内容还得看子类，不同的策略会采用不同的Context
 * {@code @author:} wisecoach
 * {@code @date:} 2023/3/2 下午9:45
 * {@code @version:} 1.0.0
 */

public interface TransactionContext {
    /**
     * 取得当前的事务状态
     * Note：只有环境存在，该Status不会为null
     */
    @NotNull
    TransactionStatus getTransaction();

    /**
     * 取得外层的事务环境
     */
    @Nullable
    TransactionContext getOldTransaction();

    /**
     * 设置嵌套外层的事务
     */
    void setOldTransaction(TransactionContext oldTransaction);
}
